let a = Symbol()
    let a1 = Symbol()
    //a === a1 false
    let s = Symbol("name")
    let s2 = Symbol("name")
    //s === s2 false
    const obj = {
        toString(){
            return "杨智宇是沙雕男孩"
        }
    }
    const s1 = Symbol(obj)
    //Symbol("杨智宇是个男孩")
    let sym = Symbol('My symbol')
     
    //let sum = sym + 'abc' Symbol 值不能与其他类型的值进行运算 Cannot convert a Symbol value to a string

    //String(sym)"Symbol(My symbol)"
    //sym.toString()"Symbol(My symbol)"

    //Symbol 值也可以转为布尔值，但是不能转为数值
    Boolean(sym)//true
    !sym //false
    //Number(sym) Cannot convert a Symbol value to a number

    //ES2019提供了一个实例属性description，直接返回 Symbol 的描述。
    console.log(sym.description)

    //作为属性名的 Symbol {Symbol(): "Hello word!"}
    let mySymbol = Symbol();
    //第一种写法
    let b = {}
    b[mySymbol] = 'Hello word!';
    console.log(b)//{Symbol(): "Hello word!"}
    //第二种写法
    let b1 ={
        [mySymbol]:"Hello word!"
    }
    console.log(b1)//{Symbol(): "Hello word!"}
    //第三种写法
    let b2 = {}
    Object.defineProperty(b2,mySymbol,{value:"Hello word!"})
    console.log(b2)//{Symbol(): "Hello word!"}

    //Symbol.for()，Symbol.keyFor()
    let c1 = Symbol.for('name')
    let c2 = Symbol.for('name')
    c1 === c2 //true
    //c1和c2都是 Symbol 值，但是它们都是由同样参数的Symbol.for方法生成的，所以实际上是同一个值。
    // Symbol("bar") === Symbol("bar")
    // false
    //Symbol.for()与Symbol()这两种写法，都会生成新的 Symbol。
    //它们的区别是，前者会被登记在全局环境中供搜索，后者不会。
    
    
    let d1 = Symbol.for("foo");
    Symbol.keyFor(s1) // "foo"
    let d2 = Symbol("foo");
    Symbol.keyFor(s2) // undefined
    //变量d2属于未登记的 Symbol 值，所以返回